package com.ruoyi.common.core.domain.entity;

import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;


/**
 * 部门表 sys_dept
 */
@Data
public class SysDept extends BaseEntity<SysDept> {
    private static final long serialVersionUID = 1L;

    /**
     * 部门ID
     */
    @TableId
    private Long deptId;

    /**
     * 父部门ID
     */
    private Long parentId;

    /**
     * 上级机构跟部门ID
     */
    private Long parentRootDeptId;

    /**
     * 机构跟部门ID
     */
    private Long rootDeptId;

    /**
     * 祖级列表
     */
    private String ancestors;

    /**
     * 部门编码每一级3位，左补0
     */
    private String deptCode;

    /**
     * 部门名称
     */
    private String deptName;

    /**
     * 部门名称
     */
    private String shortDeptName;

    /**
     * 显示顺序
     */
    private Integer orderNum;

    /**
     * 负责人
     */
    private String leader;

    /**
     * 负责人
     */
    private Long leaderUserId;


    /**
     * 创建人
     */
    private Long userId;

    /**
     * 联系电话
     */
    private String phone;

    /**
     * 邮箱
     */
    private String email;

    /**
     * 部门状态:0正常,1停用
     */
    private String status;

    /**
     * 备注
     */
    private String memo;

    /**
     * 删除标志（0代表存在 2代表删除）
     */
    @TableField(value = "is_del")
    private Boolean del;

    /**
     * 行政级别（省、市、区）
     */
    private String administrativeLevel;

    /**
     * 父部门名称
     */
    @TableField(exist = false)
    private String parentName;

    private String createBy;

    /**
     * 用户类型（00系统用户）
     */
    private String userType;


    private String updateBy;
    /**
     * 子部门
     */
    @TableField(exist = false)
    private List<SysDept> children = new ArrayList<SysDept>();

    /**
     * 专业组编号
     */
    private String expertGroupIds;

    /**
     * 专业组
     */
    private String expertGroups;

    /**
     *  第三方部门id
     */
    private String orgId;

    /**
     * 第三方部门父级id
     */
    private String orgParentId;

    /**
     * 第三方部门类型
     */
    private String orgType;

    /**
     * 排序
     */
    private String showOrder;

    /**
     * 部门编号
     */
    private String orgNo;



    /**
     * 是否省
     */
     public Boolean isProvince(){
         return "省".equals(administrativeLevel);
     };
     /**
     * 是否市
     */
     public Boolean isCity(){
         return "市".equals(administrativeLevel);
     };
     /**
     * 是否区县
     */
     public Boolean isArea(){
         return "县".equals(administrativeLevel);
     };

     public String orgNoToAdministrativeLevel(){
         if(orgNo == null){
             return "";
         }
         if(orgNo.startsWith("01610000")){
             return "省";
         }else if(ReUtil.isMatch("0161[0-9]{2}00", orgNo)){
             return "市";
         }else if(ReUtil.isMatch("0161[0-9]{2}[0-9]{2}00", orgNo)){
             return "县";
         }else{
             return "";
         }
     }

    public Long getId() {
        return deptId;
    }
}
